package larc.dao.impl;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import larc.dao.intr.UsuarioDao;
import larc.model.Usuarios;
import larc.util.HibernateUtil;

public class UsuarioDaoImpl implements UsuarioDao {

	@Override
	public void insertar(Usuarios usuario) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		try{
			session.beginTransaction();
			session.save(usuario);
			session.getTransaction().commit();
			session.close();
		}catch(Exception e)
		{
			System.out.println("Error al insertar : " + e.getMessage());
			session.beginTransaction().rollback();
		}
	}

	@Override
	public void actualizar(Usuarios usuario) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		try{
			session.beginTransaction();
			session.update(usuario);
			session.getTransaction().commit();
			session.close();			
		}catch(Exception e)
		{
			System.out.println("Error al actualizar : " + e.getMessage());
			session.beginTransaction().rollback();
		}	
		
	}

	@Override
	public void eliminar(Usuarios usuario) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		try{
			session.beginTransaction();
			session.delete(usuario);
			session.getTransaction().commit();
			session.close();
		}catch(Exception e)
		{
			System.out.println("Error al eliminar : " + e.getMessage());
			session.beginTransaction().rollback();
		}		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuarios> listarTodo() {
		Session session = HibernateUtil.getSessionFactory().openSession();		
		return session.createQuery("from Usuarios").list();
	}
	
	public Usuarios BuscarxUsuario(Usuarios usuario) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		String sql = "from Usuarios as u where u.usuUsuario=:user and u.usuPassword=:pass";
		Query query = session.createQuery(sql);
		query.setString("user",usuario.getUsuUsuario());
		query.setString("pass",usuario.getUsuPassword());
		return (Usuarios) query.uniqueResult();		
	}
}